﻿using Bettzueche.RLLibrary.Types;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Bettzueche.DampfrossContinuum
{
    /// <summary>
    /// MultiTiling für das charakteristische Landschaftsmerkmal.<para>
    /// 1 Tiling, Auflösung = 0.1 -> 9 Intervalle</para>
    /// </summary>
    /// <remarks>
    /// Die Landschaftsmaße sind eigentlich so modelliert, dass auch Werte größer 0.9 für
    /// unbekanntes Terrain vorkommen können, was in der Dampfross-Welt aber nicht vorkommt.
    /// Daher hier nur 9 Intervalle verteilt auf [0.0, 0.9[.<para>
    /// Für das Zentrumsfeld gibt es ein extra <c>ZentrumTiling</c>.
    /// </para>
    /// </remarks>
    public class LandschaftsTiling : MultiTiling
    {
        /// <summary>
        /// Initializes a new instance of the <c>MultiTiling</c> <see cref="LandschaftsTiling"/> class.<para>
        /// precision = 0.9 / 3^2 = 0.1 -> 9 unterscheidbare Unterteilungen des Wertebereichs.<br />
        /// tilings = 3^0 = 1 Tiling<br />
        /// Wertebereich [0, 0.9[.
        /// </para>
        /// </summary>
        public LandschaftsTiling() 
            : base(1, 0.1, 0.0, 0.9)
        {
            //precision = 0.9 / Math.Pow(9.0, 1.0); // = 0.1 -> 9 unterscheidbare Unterteilungen des Wertebereichs
            //int tilings = (int)Math.Pow(9.0, 0); // 1 Tiling
            //MultiTiling uTiling = new MultiTiling(tilings, precision, min: 0.0, max: 1.0);
        }

        /// <summary>
        /// Initializes a new instance of <c>the MultiTiling</c> <see cref="LandschaftsTiling"/> class.
        /// <para>
        /// It's recommended to select <c>tilings</c>=b^n and <c>precision</c>=1/b^m with n&lt;=m.<br />
        /// Wertebereich ist [0, 0.9[.
        /// </para>
        /// </summary>
        /// <param name="tilings">The tilings.</param>
        /// <param name="precision">The precision.</param>
        public LandschaftsTiling(int tilings, double precision) :
            base(tilings, precision, 0.0, 0.9) 
        {
            // z.B.:
            // precision = 0.9 / 3^2 = 0.9/9 = 0.1
            // Tilings = 3^1 = 3 (oder tilings = 3^2 = 9... ist aber doof)
            // insgesamt 3^2=9 Tiles
        }

        /// <summary>
        /// Returns a <see cref="System.String" /> that represents this instance.
        /// </summary>
        /// <returns>
        /// A <see cref="System.String" /> that represents this instance.
        /// </returns>
        public override string ToString() {
            return base.ToString();
        }
    }
}
